#! /usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2020/3/14 18:58
# @Author : youngchaolin
# @File : 代码块.py

print()

'''
python程序由代码块组成的，我们所有的代码都需要依赖代码块执行
1 一个模块，一个函数，一个类，一个文件等都可以是一个代码块
2 交互方式下输入的每个命令，每行也是一个代码块

两个机制：
同一个代码块下，有一个机制，其他的代码块下，遵循另外的机制，类似大陆和香港

同一代码块的缓存机制：
python在执行同一个代码块，初始化对象的命令时，首先会去检查这个值是否存在，如果存在就会重用。
本质上是初始化对象时，将变量名和变量值存在一个字典里，如果下次初始化一个新的变量，会首先在字典
里查询是否有对应的值，如果有就将新的变量指向这个值，达到值的重用，虽然变量名不一样，但是id值是一样的。
适用的对象：
int bool str，即所有的数字（bool底层也是数字）、还有几乎所有的字符串
缓存机制优点：
节省内存，提升性能，可以联想一个宿舍买4个拖把和1个拖把的区别

不同代码块下缓存机制：
python会有一个小数据池，里面会为int分配一定的数据，str也分配一定的数据，如果初始化对象有这个数据，就直接使用
类似同一代码块下的机制，只是它所缓存的数据量比较少。
适用的对象：
int bool str
int分配的数据范围是-5~256
str分配的是一定规则的少量字符串，需参考博客看，无需花太多精力，了解即可
缓存机制优点：
节省内存，提升性能，可以联想一个宿舍买4个拖把和1个拖把的区别

'''

# 同一代码块下的缓存机制
s1='alex' # 初始化命令
s2='alex' # 初始化命令
print(s1==s2) # True
# id一样，实现重用
print(id(s1))
print(id(s2))
# 指向的对象相同，使用了缓存机制
print(s1 is s2) # True

# 适用对象测试
# 1 int
print('------int------')
i1=100
i2=100
print(i1 is i2)
# 2 bool
print('------bool------')
b1=True
b2=True
print(b1 is b2)
# 3 str
print('------str------')
s1='messi'
s2='messi'
print(s1 is s2)
# 4 list
print('------list------')
l1=[1,2,3]
l2=[1,2,3]
print(l1 is l2)
# 5 dict
print('------dict------')
d1={'name':'messi','age':34}
d2={'name':'messi','age':34}
print(d1 is d2)
# 6 tuple
print('------tuple------')
t1=(l1,2,3)
t2=(l1,2,3)
print(t1 is t2)

# 不同代码块下的缓存机制
# 可以使用命名行来测试，一行就是一个代码块


